#ifndef MESSAGECLASS_H
#define MESSAGECLASS_H

//底层管理收发信息的类

#include <QObject>
#include <QTcpSocket>
#include "AbstractLayer/Network/threadmanger.h"
#include "AbstractLayer/Database/databaseclass.h"
#include "AbstractLayer/MsgHandler/myjson.h"
#include "AbstractLayer/Encipher/encipher.h"
#include <QPair>
#include <QString>
#include <QFile>
class MessageClass : public QObject
{
    Q_OBJECT
public:
    explicit MessageClass(QObject *parent = nullptr);

public:


    void recvTcpContent();
signals:
    void s_haveVerify(QByteArray recv);
    //void s_haveMessage(QPair<QString,QString> message);
    void s_signupResult(QString);
    void s_getUserName(const QString& name);
    void s_recvContactDone(const QList<QPair<QString,QString>>&);
    //void s_recvSearchFriendDone(const QList<QString>&);
    void s_recvSearchFriendDone(const QString&);
    void s_friendResult(const QString& friendoc,const QString& friendname);
    void s_havefriendApply(const QString& friendoc,const QString& friendname,const EnumLib::ApplyStatus status);
public slots:
    //初始化消息网络
    void initNetwork(QString addr,qint64 port);
    void setCurrentOC(const QString& useroc);
    //发送验证消息
    void sendLogin(QString,QString);
    //发送消息
    void sendMessage(QString senderoc,QString targetoc,QString str);
    //发送用户退出登录指令
    void sendLogout(QString oc);
    //发送用户名修改指令
    void sendUserNameUpdate(QString useroc,QString newname);
    //发送用户oc修改指令
    void sendUserOCUpdate(QString newuseroc);
    //发送注册用户指令
    void sendSignUp(QString useroc,QString username,QString password,QString avatar);
    //发送请求用户信息
    void sendGetUserInfo(const QString& useroc);
    //发送请求用户好友列表
    void sendGetConactList();
    //处理返回的好友列表信息
    //void dealContactInfo(const QByteArray& info);
    //请求搜索好友消息
    void sendSearchFriednInfo(const QString& friendoc);
    //处理返回的搜索好友结果
    //QString dealSearchFriendInfo(const QByteArray& info);
    //发送好友请求报文
    void sendFriendApply(const QString& friendoc);
    //处理好友申请结果
    //void dealFriendResult(const QByteArray& recv);
    //处理发送来的好友申请请求
    //void dealFriendApply(const QByteArray& recv);
    //发送验证消息
    void sendFriendResult(const QString& friendoc);

    void sendUserAvatarFile(QString useroc,QString path);
private:
    QTcpSocket *socket;
    QString useroc;
    QString friendoc;
    QList<QPair<QString,QString>> contactlist;
    //QList<QString> searchfriendlist;
    //解析接收到的数据
    void analysisTcpContent(const QByteArray& recv);
    //解析接收到的用户信息，后发送信号
    //void analysisDealUserInfo(const QByteArray& recv);
    std::vector<int> computeLPSArray(const QString &pattern);
    std::vector<int> KMPSearch(const QString &text, const QString &pattern);
    QStringList splitStringUsingKMP(const QString &mainString, const QString &delimiter);

};

#endif // MESSAGECLASS_H
